/**
 * @link https://laravel.com/docs/5.6/broadcasting#installing-laravel-echo - 使用文档
 */
import LaravelEcho from "laravel-echo"

window.Pusher = require('pusher-js');

// const token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9taXJyb3IubWVcL2FwaVwvYWRtaW5cL2xvZ2luIiwiaWF0IjoxNTM5MjQwNjcwLCJleHAiOjE1Mzk4NDU0NzAsIm5iZiI6MTUzOTI0MDY3MCwianRpIjoiNmdGbW5jTUxmN2ZYejE3YyIsInN1YiI6MSwicHJ2IjoiYzA3ZWRkNjE0Y2E5ZDEwNjljMmNkNGQ3ZGJhZGYzYmQ1NDk4N2I0YyJ9.KFxR7SrjGg08jDDwKzjrf7M1qW7m9iUmnR4_tbQo0SA';

window.Echo = new LaravelEcho({
  // pusher 配置要和 env 一致
  broadcaster: 'pusher', // 除 pusher 外还有 socket io 驱动，需要 node 运行 laravel-echo-server
  key: '842bfa07669454014316',
  cluster: 'ap1',
  encrypted: true,

  // namespace: 'App.Other.Namespace' // 默认是 App.Events

  // 使用 jwt 认证 ( 如用 pusher 做驱动好像并不能使用 jwt 进行验证 )
  // 只能使用 laravel 默认的 session guard
  // auth: {
  //   headers: {
  //     'Authorization': 'Bearer ' + token
  //   }
  // }
});

/**
 * 公有频道监听 示例
 * @example
 * 1. 在 .env 中
 *    配置好 PUSHER_ 相关值，与上方配置一致
 *    BROADCAST_DRIVER 改成 pusher
 *    QUEUE_DRIVER 配置改成 redis 并开启 php artisan queue:work ，本地测试时可改成 sync
 * 2. 在 php artisan tinker 中 运行 event(new App\Events\LaravelEchoTest) 即可发送广播
 */
window.Echo
  .channel('my-channel')
  /**
   * laravel 默认会把命名空间放在 App.Events 下
   * 未定义 \App\Events\LaravelEchoTest::broadcastAs 函数直接 listen 类名即可
   */
  .listen("LaravelEchoTest", (data) => {
    console.log("LaravelEchoTest");
    console.log(data);
  })
  /**
   * 前面加 . 表示不使用默认的命名空间，从 root 开始，
   */
  .listen(".App\\Events\\LaravelEchoTest", (data) => {
    console.log(".App\\Events\\LaravelEchoTest");
    console.log(data);
  })
  /**
   *  如果 \App\Events\LaravelEchoTest::broadcastAs 中
   *  定义了 event 名，必须在前面加 . 表示不在命名空间下
   */
  .listen(".my-event", (data) => {
    console.log(".my-event");
    console.log(data);
  })
;
/**
 * 私有频道示例
 *   由于使用 pusher 做 driver 无法使用 jwt 做验证，所以后续不打算使用 laravel-echo 做长连接
 *
 * @example
 *    如果要监听 private 频道
 *    要在 config/app.php 中打开 App\Providers\BroadcastServiceProvider::class 的注释
 *    在 routes/channels.php 中定义频道
 */
window.Echo
  .channel('App.User.1')
  .listen("AppUserEvent", (data) => {
    console.log("AppUserEvent");
    console.log(data);
  })
;